#ifndef CCarnAdrBRH
#define CCarnAdrBRH
//---------------------------------------------------------------------------
#include "Outils.h"
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>

//---------------------------------------------------------------------------
#define NOM_REP_TEMP_CARNADR "SveCarn"

enum eTypeRestauration
   {
   eEcraser,           //Si les données existent déjà, elles seront écrasées
   eEcraserAnterieure, //Si les données existent déjà et sont plus vieilles, elles seront écrasées
   eNePasEcraser       //Si les données existent déjà, elles ne seront pas écrasées
   };

typedef void __fastcall (__closure *TInsertFloppyEvent)(int NumDisk,
                                                        const AnsiString &FilePath,
                                                        bool &Abort,
                                                        bool Backup);

typedef void __fastcall (__closure *TIncrementationEvent)(WORD BRPercents,
                                                          WORD PatternPercents,
                                                          WORD FilePercents,
                                                          bool Backup);

typedef bool (*FctSauverCarnAdr)(const AnsiString &aFichCible, const AnsiString &aRepTemp,
                                 TInsertFloppyEvent FctInsererDisquette, TIncrementationEvent FctProgression);
typedef bool (*FctDecompresserCarnAdr)(const AnsiString &aFichierSource, const AnsiString &aRepTemp,
                                TInsertFloppyEvent FctInsererDisquette, TIncrementationEvent FctProgression);
typedef bool (*TFctRestaurerFiche)(const AnsiString &aRepSource, unsigned long *NoFiche,
                                  eTypeRestauration eModeRestauration);
typedef bool (*FctEffacer)(void);
typedef bool (*FctRafraichirRepDatasCarnAdr)(void);


class PACKAGE_OUTILS CCarnAdrBR : public TComponent
{
protected:

public:
   __fastcall CCarnAdrBR(TComponent* Owner);
   virtual __fastcall ~CCarnAdrBR();

   bool __fastcall Sauver(void);
   bool __fastcall Decompresser(void);
   bool __fastcall Restaurer(unsigned long *NoFiche, eTypeRestauration eModeRestauration);

   bool __fastcall RafraichirRepDatas();

private:
  FctRafraichirRepDatasCarnAdr _RafraichirRepDatas;
  FctSauverCarnAdr _Sauver;
  FctDecompresserCarnAdr _Decompresser;
  TFctRestaurerFiche _RestaurerFiche;
  FctEffacer _Effacer;

  HINSTANCE hCarnAdr;
  AnsiString m_aRepTravail;
  AnsiString m_aRepTmp;
  AnsiString m_aNomFichier;
  AnsiString aBRRepDecomp;

  TInsertFloppyEvent	FOnInsertFloppy;
  TIncrementationEvent FOnIncrementation;

  void __fastcall SetRepTemp (AnsiString aRep);
  void __fastcall SetRepTrav (AnsiString aRep);
  bool __fastcall Effacer(void);

__published:
  //Répertoire qui contient le fichier de sauvegarde
  __property AnsiString RepertoireTravail    = {read = m_aRepTravail, write = SetRepTrav};
  //Nom du fichier de sauvegarde
  __property AnsiString NomFichier           = {read = m_aNomFichier, write = m_aNomFichier};
  //Répertoire temporaire à utiliser (peut-être vide)
  __property AnsiString RepertoireTemporaire = {read = m_aRepTmp, write = SetRepTemp};
   //Evenement appeler lors de la demande d'insertion d'une disquette, s'il est absent la gestion est automatique
   __property TInsertFloppyEvent OnInsererDisquette = {read=FOnInsertFloppy, write=FOnInsertFloppy};
   //Evenement appeler pour géréer une barre de progression, s'il est absent la gestion est automatique
   __property TIncrementationEvent OnIncrementation = {read=FOnIncrementation, write=FOnIncrementation};
  };
//---------------------------------------------------------------------------
#endif
